/**
 * 日志记录工具
 * 统一管理应用的日志输出
 */

/**
 * 日志级别
 */
const LOG_LEVELS = {
  DEBUG: 0,
  INFO: 1,
  WARN: 2,
  ERROR: 3,
};

/**
 * 当前日志级别（从环境变量读取，默认为INFO）
 */
const currentLogLevel = LOG_LEVELS[process.env.LOG_LEVEL?.toUpperCase()] ?? LOG_LEVELS.INFO;

/**
 * 格式化日志消息
 * @param {string} level - 日志级别
 * @param {string} message - 日志消息
 * @param {Object} data - 附加数据
 * @returns {string} 格式化后的日志字符串
 */
const formatLog = (level, message, data = null) => {
  const timestamp = new Date().toISOString();
  const prefix = `[${timestamp}] [${level}]`;
  
  if (data) {
    return `${prefix} ${message}\n${JSON.stringify(data, null, 2)}`;
  }
  
  return `${prefix} ${message}`;
};

/**
 * 调试日志
 */
const debug = (message, data = null) => {
  if (currentLogLevel <= LOG_LEVELS.DEBUG) {
    console.debug(formatLog('DEBUG', message, data));
  }
};

/**
 * 信息日志
 */
const info = (message, data = null) => {
  if (currentLogLevel <= LOG_LEVELS.INFO) {
    console.log(formatLog('INFO', message, data));
  }
};

/**
 * 警告日志
 */
const warn = (message, data = null) => {
  if (currentLogLevel <= LOG_LEVELS.WARN) {
    console.warn(formatLog('WARN', message, data));
  }
};

/**
 * 错误日志
 */
const error = (message, data = null) => {
  if (currentLogLevel <= LOG_LEVELS.ERROR) {
    console.error(formatLog('ERROR', message, data));
  }
};

module.exports = {
  debug,
  info,
  warn,
  error,
  LOG_LEVELS,
};

